home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 22
/
Amiga Format AFCD22 (Jan 1998, Issue 106).iso
/
-in_the_mag-
/
converters
/
graphics
/
netpbm
/
source1
/
netpbm.programming
< prev
next >
Wrap
Text File
|
1997-11-16
|
3KB
|
59 lines
This file is an attempt to give some basic guide lines for those
who wish to write new Netpbm filters. Since Netpbm is intended to
be portable to many platforms, it is absolutely necessary to stick
to these when programming. Most of these rules were set up by Jef
Poskanzer when he wrote Pbmplus, though some have come up more
recently.
* Your new filter must belong to one of the four Netpbm formats,
i.e. pbm, pgm, ppm or pnm. They are defined as follows:
pbm: Bitmaps only, i.e. a pixel is either black or white.
pgm: Gray scales, i.e. a pixel can have any value between black
and white, but no colours.
ppm: Colour images. Note that Netpbm does not support the use of
look up tables.
pnm: A facility able to create or read more than one of the formats
above. Note that all pgm filters can automatically read pbm
images, and that all ppm filters can automatically read both
pbm and pgm files. A pnm utility does more than this, its action
depends on the type of the input file. E.g. the pnmtotiff utility
creates a bitmap TIFF file when it reads a pbm file on its input,
a gray scale TIFF files when it reads a pgm file on its input, etc.
ppmtogif on the other hand treats a pbm file on its input exactly
as if it were a ppm file with only the colours black and white.
Decide which one of these formats your filter belongs to.
* If you want to use global variables or global functions in your filter,
make them static, so that they won't cause problems to other filters
when you compile a merged binary (see the Makefile).
* So far, all filters are written in K&R style C, but with prototypes
for both K&R C and ANSI C. The ARGS macro (defined in pbmplus.h) helps
you to write prototypes. You can use it like this:
int my_function ARGS((int a, double b, char c));
* Include pbm.h, pgm.h, ppm.h, or pnm.h (only one of them!). Don't include
files like stdio.h, stdlib.h etc. These should be included through
pbmplus.h, which in turn is included by p?m.h (i.e. pbm.h, pgm.h, ppm.h,
or pnm.h). You may need to include math.h though.
* Declare main as: int main(argc, argv), not void! VMS won't compile
void main().
* Always start the code in main() with a call to p?m_init().
* All input and output of pbm format files must go through the library
routines. This ensures compatibility, error checking, correct byte
order etc.
* Use pm_error() and pm_message() for error messages and other messages.
* Don't forget to write a proper manual page!
The easiest way to write your own facility, is to take an existing one,
similar to the want you want to write, and to modify it. This saves a
lot of time, and ensures conformity with the rules stated above.
Oliver Trepte, November 15th, 1993
oliver@fysik4.kth.se